import { asyncScheduler } from "../scheduler/async";
import { Observable } from "../Observable";
import { Scheduler } from "../Scheduler";
/**
 * timer 函数是一个工厂函数，可以创建一个发出数字的 Observable，每个数字增加1。它接受两个参数：起始值和间隔时间
 * @param {*} dueTime 间隔时间
 * @param {*} intervalOrScheduler  永久定时器间隔时间
 * @param {*} scheduler 调度器实例
 * @returns
 */
export function timer(
  dueTime = 0,
  intervalOrScheduler,
  scheduler = asyncScheduler
) {
  let intervalDuration = -1;
  // 1. 这一段代码,函数的第二个参数，逻辑，有值
  if (intervalOrScheduler != null) {
    // 2. 可以是函数， 赋给 scheduler
    if (intervalOrScheduler instanceof Scheduler) {
      scheduler = intervalOrScheduler;
    } else {
      // 3. 可以是数字，代表 开启永久定时器，
      intervalDuration = intervalOrScheduler;
    }
  }
  // .........................
  return new Observable((subscriber) => {
    // 初始值
    let n = 0;
    //
    return scheduler.schedule(function () {
      // 累加 每个数字增加1;
      subscriber.next(n++);
      // 每次，执行完后，会再次执行,达到永久定时器的效果
      if (intervalDuration > 0) {
        this.schedule(undefined, intervalDuration);
      } else {
        subscriber.complete();
      }
    }, dueTime);
    //setTimeout();
  });
}
